home *** CD-ROM | disk | FTP | other *** search
/ Collection of Tools & Utilities / Collection of Tools and Utilities.iso / bbsutil / hsrc_117.zip / EDITNODE.C < prev    next >
C/C++ Source or Header  |  1990-09-13  |  6KB  |  208 lines

  1. #include "msgg.h"
  2. #include "twindow.h"
  3. #include "keys.h"
  4. #include "headedit.h"
  5.  
  6. #define msk8 msk35+27
  7. #define msk20 msk78+58
  8. #define msk40 msk78+38
  9.  
  10.  
  11.  
  12.     /* Edit a node's entry in QNL_DAT.BBS */
  13.  
  14. void pascal edit_node (void) {
  15.  
  16.   WINDOW *wnd;
  17.   FIELD  *fld;
  18.   struct nodeinfo nif;
  19.   static char zone[7]="";
  20.   static char net[7]="";
  21.   static char node[7]="";
  22.   char temp[133];
  23.   char type[5];
  24.   char name[21];
  25.   char city[41];
  26.   char phone[41];
  27.   char password[9];
  28.   char flags[7];
  29.   char baud[7];
  30.   char cost[7];
  31.   long x;
  32.   int handle;
  33.   int len;
  34.   int returncode;
  35.  
  36.     if(!nidxsize || !nidx) {
  37.         any_message(" No nodelist available. ");
  38.         pause();
  39.         return;
  40.     }
  41. ReStart:
  42.     wnd=establish_window(4,maxy-8,6,32);
  43.     set_border(wnd,3);
  44.     set_title(wnd," Nodelist Editor ");
  45.     set_colors(wnd,BORDER,7,0,0);
  46.     display_window(wnd);
  47.     wcursor(wnd,0,0);
  48.     wprintf(wnd," F10=edit F9=list ESC=abort");
  49.     if (!*zone || !(word)atol(zone)) {
  50.         sprintf(zone,"%u",curaddress.zone);
  51.         sprintf(net,"%u",curaddress.net);
  52.         sprintf(node,"%u",curaddress.node);
  53.     }
  54.     init_template(wnd);
  55.     wprompt(wnd,1,1,"Zone:");
  56.     wprompt(wnd,1,2,"Net:");
  57.     wprompt(wnd,1,3,"Node:");
  58.     fld=establish_field(wnd,7,1,msk5,zone,'N');
  59.     field_window(fld,"zoneedit  ",40,6);
  60.     fld=establish_field(wnd,7,2,msk5,net,'N');
  61.     field_window(fld,"netedit   ",40,5);
  62.     fld=establish_field(wnd,7,3,msk5,node,'N');
  63.     field_window(fld,"nodeedit  ",40,4);
  64.     prep_template(wnd);
  65. NodeOver:
  66.     returncode=data_entry(wnd);
  67.     if (returncode==ESC){
  68.         delete_window(wnd);
  69.         return;
  70.     }
  71.     else if(returncode==F6) {
  72.         node_lister();
  73.         goto NodeOver;
  74.     }
  75.     else if(returncode!=F10) goto NodeOver;
  76.  
  77.     nif.zone=(word)atol(zone);
  78.     nif.net=(word)atol(net);
  79.     nif.node=(word)atol(node);
  80.  
  81.     for (x=0;x<(nidxsize+1);x++) {
  82.         if (nidx[x].zone==nif.zone && nidx[x].net==nif.net && nidx[x].node==nif.node) break;
  83.     }
  84.     if(x>nidxsize) {
  85.         any_message(" Can't find requested node. ");
  86.         pause();
  87.         goto NodeOver;
  88.     }
  89.  
  90.     sprintf(temp,"%sQNL_DAT.BBS",nodepath);
  91.     if ((handle=_open(temp,O_RDONLY | O_BINARY | O_DENYNONE))==-1) {
  92.        error_message(" Can't open QNL_DAT.BBS ");
  93.        pause();
  94.        goto NodeOver;
  95.     }
  96.     lseek(handle,x*(long)sizeof(struct nodeinfo),SEEK_SET);
  97.     if (_read(handle,&nif,sizeof(struct nodeinfo))<1) {
  98.         _close(handle);
  99.         error_message(" Read Error ");
  100.         goto NodeOver;
  101.     }
  102.     _close(handle);
  103.     len=*nif.name;
  104.     memmove(nif.name,&nif.name[1],len);
  105.     nif.name[len]=0;
  106.     len=*nif.city;
  107.     memmove(nif.city,&nif.city[1],len);
  108.     nif.city[len]=0;
  109.     len=*nif.phone;
  110.     memmove(nif.phone,&nif.phone[1],len);
  111.     nif.phone[len]=0;
  112.     len=*nif.password;
  113.     memmove(nif.password,&nif.password[1],len);
  114.     nif.password[len]=0;
  115.  
  116.     sprintf(type,"%-hu",nif.type);
  117.     sprintf(baud,"%-u",nif.baud);
  118.     sprintf(cost,"%-d",nif.cost);
  119.     sprintf(flags,"%-u",nif.flags);
  120.     strcpy(name,nif.name);
  121.     strcpy(city,nif.city);
  122.     strcpy(phone,nif.phone);
  123.     strcpy(password,nif.password);
  124.  
  125.     delete_window(wnd);
  126.     wnd=establish_window(4,maxy,14,58);
  127.     set_border(wnd,3);
  128.     set_title(wnd," Nodelist Editor ");
  129.     set_colors(wnd,BORDER,7,0,0);
  130.     display_window(wnd);
  131.     wcursor(wnd,0,0);
  132.     wprintf(wnd," F10 to change or ESC to abort");
  133.     wcursor(wnd,2,10);
  134.     wprintf(wnd,"Editting %u:%u/%01u\n",(word)atol(zone),(word)atol(net),(word)atol(node));
  135.     init_template(wnd);
  136.     wprompt(wnd,1,1,"Type:");
  137.     wprompt(wnd,1,2,"Name:");
  138.     wprompt(wnd,1,3,"City:");
  139.     wprompt(wnd,1,4,"Phone:");
  140.     wprompt(wnd,1,5,"Pwd:");
  141.     wprompt(wnd,1,6,"Flags:");
  142.     wprompt(wnd,1,7,"Baud:");
  143.     wprompt(wnd,1,8,"Cost:");
  144.     fld=establish_field(wnd,9,1,msk3,type,'N');
  145.     field_window(fld,"typeedit  ",40,6);
  146.     fld=establish_field(wnd,9,2,msk20,name,'a');
  147.     field_window(fld,"nameedit  ",40,5);
  148.     fld=establish_field(wnd,9,3,msk40,city,'a');
  149.     field_window(fld,"cityedit  ",40,4);
  150.     fld=establish_field(wnd,9,4,msk40,phone,'N');
  151.     field_window(fld,"phoneedit ",40,3);
  152.     fld=establish_field(wnd,9,5,msk8,password,'a');
  153.     field_window(fld,"passedit  ",40,2);
  154.     fld=establish_field(wnd,9,6,msk5,flags,'N');
  155.     field_window(fld,"flagedit  ",40,1);
  156.     fld=establish_field(wnd,9,7,msk5,baud,'N');
  157.     field_window(fld,"baudedit  ",40,2);
  158.     fld=establish_field(wnd,9,8,msk5,cost,'N');
  159.     field_window(fld,"costedit  ",40,3);
  160.     prep_template(wnd);
  161. NodeOver2:
  162.     returncode=data_entry(wnd);
  163.     if(returncode==ESC) {
  164.         delete_window(wnd);
  165.         goto ReStart;
  166.     }
  167.     else if(returncode!=F10) goto NodeOver2;
  168.  
  169.     rstrip(name);
  170.     rstrip(city);
  171.     rstrip(phone);
  172.     rstrip(password);
  173.  
  174.     nif.type=(char)atoi(type);
  175.     nif.baud=(word)atol(baud);
  176.     nif.cost=atoi(cost);
  177.     nif.flags=(word)atol(flags);
  178.     len=strlen(name);
  179.     memcpy(&nif.name[1],name,len);
  180.     *nif.name=len;
  181.     len=strlen(city);
  182.     memcpy(&nif.city[1],city,len);
  183.     *nif.city=len;
  184.     len=strlen(phone);
  185.     memcpy(&nif.phone[1],phone,len);
  186.     *nif.phone=len;
  187.     len=strlen(password);
  188.     memcpy(&nif.password[1],password,len);
  189.     *nif.password=len;
  190.  
  191.     sprintf(temp,"%sQNL_DAT.BBS",nodepath);
  192.     if ((handle=_open(temp,O_RDWR | O_BINARY | O_DENYREAD))==-1) {
  193.        error_message(" Can't open QNL_DAT.BBS ");
  194.        pause();
  195.        goto NodeOver2;
  196.     }
  197.     lseek(handle,x*(long)sizeof(struct nodeinfo),SEEK_SET);
  198.     if (_write(handle,&nif,sizeof(struct nodeinfo))<1) {
  199.         _close(handle);
  200.         error_message(" Write Error ");
  201.         pause();
  202.         goto NodeOver2;
  203.     }
  204.     _close(handle);
  205.     delete_window(wnd);
  206.     goto ReStart;
  207. }
  208.